//package com.empire.module.member.service.datahub;
//
//import com.alibaba.fastjson.JSONObject;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.kafka.core.KafkaTemplate;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.Resource;
//import java.math.BigDecimal;
//import java.time.LocalDateTime;
//import java.time.format.DateTimeFormatter;
//import java.util.*;
//import java.util.concurrent.ExecutionException;
//
///**
// * 交通记录Kafka发送模拟器
// */
//@Slf4j
//@Component
//public class TransportationRecordDataSender {
//    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//    private static final Random RANDOM = new Random();
//
//    // 交通数据Kafka主题
//    private static final String TRANSPORT_TOPIC = "datahub-transportation-record-topic";
//
//    @Resource
//    private KafkaTemplate<Object, Object> kafkaTemplate;
//
//    // 身份证号码池
//    private static final List<String> ID_CARD_NUMBERS = Arrays.asList(
//            "440105200910200124",
//            "510101201011211236",
//            "510102201112222347",
//            "500101201201233458",
//            "500102201302244569",
//            "330101201403255670",
//            "330102201504266781",
//            "320101201605277892",
//            "320102201706288903",
//            "120101201807299014",
//            "435231199009123432",
//            "330111199809123425",
//            "330111189709123432"
//    );
//
//    // 护照号码池
//    private static final List<String> PASSPORT_NUMBERS = Arrays.asList(
//            "E12345678", "P98765432", "A13579246", "B24681357", "C35792468",
//            "D46813579", "E57924681", "F68135792", "G79246813", "H81357924",
//            "J92468135", "K14725836", "L25836947", "M36947158", "N47158269",
//            "O58269370", "P69370481", "Q70481592", "R81592603", "C26037148", "C38947148"
//    );
//
//    // 机场列表
//    private static final String[] AIRPORTS = {
//            "北京首都国际机场", "上海浦东国际机场", "广州白云国际机场", "深圳宝安国际机场",
//            "成都双流国际机场", "杭州萧山国际机场", "武汉天河国际机场", "南京禄口国际机场",
//            "西安咸阳国际机场", "重庆江北国际机场"
//    };
//    // 杭州机场标识（用于快速匹配）
//    private static final String HANGZHOU_AIRPORT = "杭州萧山国际机场";
//
//    // 火车站列表
//    private static final String[] TRAIN_STATIONS = {
//            "北京南站", "上海虹桥站", "广州南站", "深圳北站", "杭州东站", "南京南站",
//            "成都东站", "武汉站", "西安北站", "重庆北站"
//    };
//    // 杭州火车站标识（用于快速匹配）
//    private static final String HANGZHOU_TRAIN_STATION = "杭州东站";
//
//    // 汽车站列表
//    private static final String[] BUS_STATIONS = {
//            "杭州汽车东站", "上海长途汽车总站", "北京八王坟长途汽车站", "广州天河汽车客运站",
//            "深圳福田汽车站", "成都茶店子客运站", "南京汽车客运站", "武汉傅家坡汽车客运站"
//    };
//    // 杭州汽车站标识（用于快速匹配）
//    private static final String HANGZHOU_BUS_STATION = "杭州汽车东站";
//
//    // 交通方式来源
//    private static final String[] FLIGHT_SOURCES = {"航空公司官网", "携程旅行", "飞猪旅行", "去哪儿网", "同程旅行"};
//    private static final String[] TRAIN_SOURCES = {"12306官网", "携程旅行", "飞猪旅行", "去哪儿网", "车站窗口"};
//    private static final String[] BUS_SOURCES = {"车站窗口", "携程旅行", "去哪儿网", "车站自助机", "公交公司官网"};
//
//    /**
//     * 定时发送模拟交通数据（每8秒发送一条）
//     */
//    @Scheduled(fixedRate = 8000)
//    public void sendMockTransportData() {
//        // 生成模拟交通数据
//        Map<String, Object> transportData = generateMockTransportData();
//
//        // 发送到Kafka
//        sendKafkaMessage(transportData);
//    }
//
//    /**
//     * 发送消息到Kafka
//     */
//    private void sendKafkaMessage(Map<String, Object> data) {
//        try {
//            kafkaTemplate.send(TRANSPORT_TOPIC, JSONObject.toJSONString(data)).get();
//            log.info("交通数据发送成功: 票号={}, 类型={}, 证件号={}",
//                    data.get("ticket_number"), data.get("type"), data.get("idNumber"));
//        } catch (InterruptedException | ExecutionException e) {
//            log.error("[sendKafkaMessage][发送交通数据失败]", e);
//        }
//    }
//
//    /**
//     * 生成模拟交通数据
//     */
//    private Map<String, Object> generateMockTransportData() {
//        Map<String, Object> data = new HashMap<>();
//
//        // 基础信息
//        data.put("create_time", LocalDateTime.now().format(DATE_FORMATTER));
//        data.put("deleted", 0); // 未删除
//        data.put("read_status", RANDOM.nextInt(2)); // 0-未读 1-已读
//
//        // 证件信息
//        int idType = RANDOM.nextBoolean() ? 1 : 2; // 1-护照 2-身份证
//        data.put("idType", idType);
//        if (idType == 1) {
//            data.put("idNumber", PASSPORT_NUMBERS.get(RANDOM.nextInt(PASSPORT_NUMBERS.size())));
//        } else {
//            data.put("idNumber", ID_CARD_NUMBERS.get(RANDOM.nextInt(ID_CARD_NUMBERS.size())));
//        }
//
//        // 交通类型（0-飞机 1-铁路 2-汽车）
//        int transportType = RANDOM.nextInt(3);
//        data.put("type", transportType);
//
//        // 乘坐人信息
//        data.put("passenger_name", generateRandomName());
//        data.put("passenger_phone", generateRandomPhone());
//
//        // 根据交通类型生成对应数据（确保起点或终点含杭州）
//        switch (transportType) {
//            case 0: // 飞机
//                generateFlightDataWithHangzhou(data);
//                break;
//            case 1: // 铁路
//                generateTrainDataWithHangzhou(data);
//                break;
//            case 2: // 汽车
//                generateBusDataWithHangzhou(data);
//                break;
//        }
//
//        return data;
//    }
//
//    /**
//     * 生成含杭州关联的航班数据（起点或终点为杭州萧山国际机场）
//     */
//    private void generateFlightDataWithHangzhou(Map<String, Object> data) {
//        // 随机生成航班号（如CA1234）
//        String letters = "ABCDEFGHJKLMNPQRSTUVWXYZ";
//        char firstChar = letters.charAt(RANDOM.nextInt(letters.length()));
//        char secondChar = letters.charAt(RANDOM.nextInt(letters.length()));
//        String flightPrefix = String.valueOf(firstChar) + secondChar;
//        String flightNumber = flightPrefix + (1000 + RANDOM.nextInt(9000));
//        data.put("transportation_number", flightNumber);
//
//        // 确保起点或终点为杭州萧山国际机场
//        boolean isStartHangzhou = RANDOM.nextBoolean();
//        String startLocation;
//        String endLocation;
//
//        if (isStartHangzhou) {
//            // 起点为杭州，终点随机选其他机场
//            startLocation = HANGZHOU_AIRPORT;
//            do {
//                endLocation = AIRPORTS[RANDOM.nextInt(AIRPORTS.length)];
//            } while (endLocation.equals(HANGZHOU_AIRPORT));
//        } else {
//            // 终点为杭州，起点随机选其他机场
//            endLocation = HANGZHOU_AIRPORT;
//            do {
//                startLocation = AIRPORTS[RANDOM.nextInt(AIRPORTS.length)];
//            } while (startLocation.equals(HANGZHOU_AIRPORT));
//        }
//
//        data.put("start_location", startLocation);
//        data.put("end_location", endLocation);
//
//        // 时间信息
//        LocalDateTime startTime = generateRandomTime(-72, 120); // 过去3天到未来5天内
//        LocalDateTime endTime = startTime.plusHours(2 + RANDOM.nextInt(10)); // 飞行时间2-12小时
//        LocalDateTime checkInTime = startTime.minusHours(1 + RANDOM.nextInt(3)); // 提前1-4小时检票
//        LocalDateTime operationTime = startTime.minusDays(1 + RANDOM.nextInt(30)); // 提前1-30天购票
//
//        data.put("start_time", startTime.format(DATE_FORMATTER));
//        data.put("end_time", endTime.format(DATE_FORMATTER));
//        data.put("busstarttime", startTime.format(DATE_FORMATTER));
//        data.put("checkintime", checkInTime.format(DATE_FORMATTER));
//        data.put("operationtime", operationTime.format(DATE_FORMATTER));
//        data.put("duration", calculateDuration(startTime, endTime));
//
//        // 其他信息
//        data.put("ticket_number", "FL" + System.currentTimeMillis() + RANDOM.nextInt(1000));
//        data.put("seat_number", (char) ('A' + RANDOM.nextInt(6)) + "" + (1 + RANDOM.nextInt(30)));
//        data.put("total_price", new BigDecimal(300 + RANDOM.nextInt(3000)).setScale(2));
//        data.put("source", FLIGHT_SOURCES[RANDOM.nextInt(FLIGHT_SOURCES.length)]);
//        data.put("remark", "航班状态正常");
//    }
//
//    /**
//     * 生成含杭州关联的火车数据（起点或终点为杭州东站）
//     */
//    private void generateTrainDataWithHangzhou(Map<String, Object> data) {
//        // 随机生成车次（如G1234）
//        String[] trainTypes = {"G", "D", "C", "Z", "T", "K"};
//        String trainNumber = trainTypes[RANDOM.nextInt(trainTypes.length)] + (100 + RANDOM.nextInt(9000));
//        data.put("transportation_number", trainNumber);
//
//        // 确保起点或终点为杭州东站
//        boolean isStartHangzhou = RANDOM.nextBoolean();
//        String startLocation;
//        String endLocation;
//
//        if (isStartHangzhou) {
//            // 起点为杭州，终点随机选其他车站
//            startLocation = HANGZHOU_TRAIN_STATION;
//            do {
//                endLocation = TRAIN_STATIONS[RANDOM.nextInt(TRAIN_STATIONS.length)];
//            } while (endLocation.equals(HANGZHOU_TRAIN_STATION));
//        } else {
//            // 终点为杭州，起点随机选其他车站
//            endLocation = HANGZHOU_TRAIN_STATION;
//            do {
//                startLocation = TRAIN_STATIONS[RANDOM.nextInt(TRAIN_STATIONS.length)];
//            } while (startLocation.equals(HANGZHOU_TRAIN_STATION));
//        }
//
//        data.put("start_location", startLocation);
//        data.put("end_location", endLocation);
//
//        // 时间信息
//        LocalDateTime startTime = generateRandomTime(-72, 120); // 过去3天到未来5天内
//        LocalDateTime endTime = startTime.plusHours(1 + RANDOM.nextInt(15)); // 运行时间1-16小时
//        LocalDateTime checkInTime = startTime.minusMinutes(30 + RANDOM.nextInt(60)); // 提前30-90分钟检票
//        LocalDateTime operationTime = startTime.minusDays(1 + RANDOM.nextInt(15)); // 提前1-15天购票
//
//        data.put("start_time", startTime.format(DATE_FORMATTER));
//        data.put("end_time", endTime.format(DATE_FORMATTER));
//        data.put("busstarttime", startTime.format(DATE_FORMATTER));
//        data.put("checkintime", checkInTime.format(DATE_FORMATTER));
//        data.put("operationtime", operationTime.format(DATE_FORMATTER));
//        data.put("duration", calculateDuration(startTime, endTime));
//
//        // 其他信息
//        data.put("ticket_number", "TR" + System.currentTimeMillis() + RANDOM.nextInt(1000));
//        data.put("seat_number", (RANDOM.nextInt(16) + 1) + "车" + (1 + RANDOM.nextInt(100)) + "号");
//        data.put("total_price", new BigDecimal(50 + RANDOM.nextInt(800)).setScale(2));
//        data.put("source", TRAIN_SOURCES[RANDOM.nextInt(TRAIN_SOURCES.length)]);
//        data.put("remark", "列车状态正常");
//    }
//
//    /**
//     * 生成含杭州关联的汽车数据（起点或终点为杭州汽车东站）
//     */
//    private void generateBusDataWithHangzhou(Map<String, Object> data) {
//        // 随机生成车次
//        String busNumber = "B" + (100 + RANDOM.nextInt(9000));
//        data.put("transportation_number", busNumber);
//
//        // 确保起点或终点为杭州汽车东站
//        boolean isStartHangzhou = RANDOM.nextBoolean();
//        String startLocation;
//        String endLocation;
//
//        if (isStartHangzhou) {
//            // 起点为杭州，终点随机选其他汽车站
//            startLocation = HANGZHOU_BUS_STATION;
//            do {
//                endLocation = BUS_STATIONS[RANDOM.nextInt(BUS_STATIONS.length)];
//            } while (endLocation.equals(HANGZHOU_BUS_STATION));
//        } else {
//            // 终点为杭州，起点随机选其他汽车站
//            endLocation = HANGZHOU_BUS_STATION;
//            do {
//                startLocation = BUS_STATIONS[RANDOM.nextInt(BUS_STATIONS.length)];
//            } while (startLocation.equals(HANGZHOU_BUS_STATION));
//        }
//
//        data.put("start_location", startLocation);
//        data.put("end_location", endLocation);
//
//        // 时间信息
//        LocalDateTime startTime = generateRandomTime(-72, 72); // 过去3天到未来3天内
//        LocalDateTime endTime = startTime.plusHours(1 + RANDOM.nextInt(8)); // 运行时间1-9小时
//        LocalDateTime checkInTime = startTime.minusMinutes(15 + RANDOM.nextInt(30)); // 提前15-45分钟检票
//        LocalDateTime operationTime = startTime.minusDays(1 + RANDOM.nextInt(7)); // 提前1-7天购票
//
//        data.put("start_time", startTime.format(DATE_FORMATTER));
//        data.put("end_time", endTime.format(DATE_FORMATTER));
//        data.put("busstarttime", startTime.format(DATE_FORMATTER));
//        data.put("checkintime", checkInTime.format(DATE_FORMATTER));
//        data.put("operationtime", operationTime.format(DATE_FORMATTER));
//        data.put("duration", calculateDuration(startTime, endTime));
//
//        // 其他信息
//        data.put("ticket_number", "BS" + System.currentTimeMillis() + RANDOM.nextInt(1000));
//        data.put("seat_number", "第" + (1 + RANDOM.nextInt(50)) + "座");
//        data.put("total_price", new BigDecimal(30 + RANDOM.nextInt(300)).setScale(2));
//        data.put("carno", generateLicensePlate());
//        data.put("source", BUS_SOURCES[RANDOM.nextInt(BUS_SOURCES.length)]);
//        data.put("remark", "客车状态正常");
//    }
//
//    // 工具方法：生成随机人名
//    private String generateRandomName() {
//        String[] familyNames = {"张", "王", "李", "赵", "刘", "陈", "杨", "黄", "周", "吴"};
//        String[] givenNames = {"伟", "芳", "娜", "秀英", "敏", "静", "强", "磊", "军", "洋",
//                "刚", "勇", "艳", "杰", "涛", "明", "华", "平", "文", "辉"};
//        return familyNames[RANDOM.nextInt(familyNames.length)] +
//                givenNames[RANDOM.nextInt(givenNames.length)];
//    }
//
//    // 工具方法：生成随机手机号
//    private String generateRandomPhone() {
//        return "1" + (3 + RANDOM.nextInt(8)) +
//                (100000000 + RANDOM.nextInt(900000000));
//    }
//
//    // 工具方法：生成随机时间（相对于当前时间的偏移量，单位：小时）
//    private LocalDateTime generateRandomTime(int minHourOffset, int maxHourOffset) {
//        int offset = minHourOffset + RANDOM.nextInt(maxHourOffset - minHourOffset + 1);
//        return LocalDateTime.now().plusHours(offset);
//    }
//
//    // 工具方法：计算时长
//    private String calculateDuration(LocalDateTime start, LocalDateTime end) {
//        long hours = java.time.Duration.between(start, end).toHours();
//        long minutes = java.time.Duration.between(start, end).toMinutes() % 60;
//        return hours + "小时" + minutes + "分钟";
//    }
//
//    // 工具方法：生成车牌号
//    private String generateLicensePlate() {
//        String[] provinces = {"京", "沪", "粤", "苏", "浙", "川", "鲁", "晋", "冀", "豫"};
//        String letters = "ABCDEFGHJKLMNPQRSTUVWXYZ";
//        return provinces[RANDOM.nextInt(provinces.length)] +
//                letters.charAt(RANDOM.nextInt(letters.length())) +
//                (10000 + RANDOM.nextInt(90000));
//    }
//}